Optimal data structure for Floyd-Warshall Algorithm - Two dimensional array - Adjacency matrix Dijkstra's Algorithm - Adjacency list and priority queue
Floyd-Warshall Algorithm - O(n^3) Dijkstra's Algorithm - O(|E| + |V|log|V|)
In [ ]:
graphUsed = { 'V1' : [['V2', 6], ['V3', 2], ['V4', 16]],
'V2' : [['V4', 5], ['V5', 4]],
'V3' : [['V2', 7], ['V5', 3], ['V6', 8]],
'V4' : [['V7', 3]],
'V5' : [['V4', 4], ['V7', 10]],
'V6' : [['V7', 1]],
'V7' : []}
distances = {}
previous = {}
vertexList = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7']
def Dijkstra(graphUsed, source):
for key in graphUsed:
distances[key] = 100000000
previous[key] = 'none'
min = distances[source] = 0
smallestDisVertex = source
indexEle = vertexList.index(source)
i=0
while vertexList:
if min > distances[vertexList[i]]:
min = distances[vertexList[i]]
indexEle = i
smallestDisVertex = vertexList.pop(indexEle)
print("Smallest Distance Vertex is ", smallestDisVertex)
for neighList in graphUsed[smallestDisVertex]:
altDist = distances[smallestDisVertex] + neighList[1]
if altDist < distances[neighList[0]]:
distances[neighList[0]] = altDist
previous[neighList[0]] = smallestDisVertex
print(distances[neighList[0]], previous[neighList[0]])
print(distances)
print(previous)
def shortestPath(destination, previous):
path = [destination]
node = destination
while previous[node] != 'none':
node = previous[node]
path.append(node)
print("Creating a path", path)
print(path)
Dijkstra(graphUsed, 'V1')
shortestPath('V7', previous)
In [ ]:
In [ ]: